/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2023-02-28
 * Time: 17:32
 */

public class Segregation1 {
    public static void main(String[] args) {

    }
}

//没有接口隔离的代码演示

/**
 * 接口 特性复习
 * 接口当中都是普通方法 不能有具体实现
 * 所有方法都是public 可以有 static方法
 * 接口不可以通过new 来实例化
 * 类和接口 之间 通过implements来实现
 * 当一个类实现一个接口 就必须重写接口当中的抽象方法
 * 接口当中的成员变量，默认是public static final修饰的
 * 当一个类实现一个接口之后，重写这个方法的时候，这个方法前面必须加上public
 */
interface Interface1{
    //所有方法都是public abstract 默认的都是抽象方法
    public abstract void operation1();
    void operation2();
    void operation3();
    void operation4();
    void operation5();
}

//B 和 D类 实现了这个接口的
class B implements Interface1{
    //一个类 实现一个接口 是要重写 接口当中所有的抽象方法
    // 而且方法钱前面都要加上public
    @Override
    public void operation1() {
        System.out.println("B 实现了 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("B 实现了 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("B 实现了 operation3");
    }

    @Override
    public void operation4() {
        System.out.println("B 实现了 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("B 实现了 operation5");
    }
}


//B 和 D类 实现了这个接口的
class D implements Interface1{
    //一个类 实现一个接口 是要重写 接口当中所有的抽象方法
    // 而且方法钱前面都要加上public
    @Override
    public void operation1() {
        System.out.println("D 实现了 operation1");
    }

    @Override
    public void operation2() {
        System.out.println("D 实现了 operation2");
    }

    @Override
    public void operation3() {
        System.out.println("D 实现了 operation3");
    }

    @Override
    public void operation4() {
        System.out.println("D 实现了 operation4");
    }

    @Override
    public void operation5() {
        System.out.println("D 实现了 operation5");
    }
}


//A 类 通过接口Interface1这个接口 依赖(使用) B中的 1，2，3个方法
// 问题就在于 A只用到了B类中的 1，2，3个方法 但是 B类实现了多余的4，5方法
// 这个问题就存在 接口不隔离问题
class A{
    public void depend1(Interface1 i){
        i.operation1();
    }
    public void depend2(Interface1 i){
        i.operation2();
    }
    public void depend3(Interface1 i){
        i.operation3();
    }
}

// C类 是依赖 D类中的 1，4，5 个接口 D多余了2，3功能
class C{
    public void depend1(Interface1 i){
        i.operation1();
    }
    public void depend4(Interface1 i){
        i.operation4();
    }
    public void depend5(Interface1 i){
        i.operation5();
    }
}
